#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
//函数外全局变量定义

int position_x,position_y;			//飞机位置
int bullet_x,bullet_y;				//子弹位置
int enemy_x,enemy_y;				//敌机位置
int high,width;						//游戏画面尺寸
int score;							//游戏得分
int pause;							//暂停

void gotoxy(int x,int y)
{
	HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X=x;
	pos.Y=y;
	SetConsoleCursorPosition(handle,pos);
}

void HideCursor()
{
	CONSOLE_CURSOR_INFO cursor_info={1,0};//第二个值为0表示隐藏光标
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}

void startup()						//数据初始化
{
	pause=1;

	high=18;
	width=30;

	position_x=high/2;
	position_y=width/2;

	bullet_x=-1;
	bullet_y=position_y;

	enemy_x=0;
	enemy_y=width/2;

	score=0;

	HideCursor(); //隐藏光标
}

void show()    //显示画面
{
	gotoxy(0,0);					//光标移动到原点
	int i,j;
	for(i=0;i<high;i++)
	{
		for(j=0;j<width;j++)
		{
			if((i==position_x) && (j==position_y))
				printf("*");		
			else if((i==position_x+1) && (j==position_y-2))
				printf("*****");
			else if((i==position_x+2) && (j==position_y-1))
				printf("* *");		//输出飞机
			else if((i==bullet_x) && (j==bullet_y))
				printf("|");		//输出子弹
			else if((i==enemy_x) && (j==enemy_y))
				printf("@");		//输出敌机
			else
				printf(" ");		//输出空格
		}
		printf("\n");
	}
	printf("score: %d \n",score);
}

void updateWithoutInput()		//与用户输入无关的更新
{
	if(pause==1)
	{
	if((bullet_x==enemy_x) && (bullet_y==enemy_y))
	{
		score++;
		bullet_x=-1;
		enemy_x=0;
		enemy_y=rand()%width;
	}

	static int speed=0;			//用于控制敌机速度

	if(bullet_x>-1)
		bullet_x--;

	if(speed<100)
		speed++;

	if(enemy_x>high)
	{	
		enemy_x=0;
		enemy_y=rand()%width;
	}
	else
	{	
		if(speed==100)
		{
			enemy_x++;
			speed=30*(score/10);
		}
	}
	}
}
void updateWithInput()			//与用户输入有关的更新
{
	int i=1;
	char input;
	if(kbhit())		//当按键时执行
	{
		input=getch();
		if (input == 27)
		{
			pause=-1*pause;
		}
		if(pause==1)
		{
		if (input == 's')
			if(position_x<15)
				position_x++;
		if (input == 'w')
			if(position_x>0)
				position_x--;
		if (input == 'a')
			if(position_y>2)
				position_y--;
		if (input == 'd')
			if(position_y<27)
				position_y++;
		if (input == ' ')
		{
			bullet_x=position_x-1;
			bullet_y=position_y;
		}
		}
	}
}

int main()
{
	startup();
	while(1)
	{
		show();					//显示画面
		updateWithoutInput();	//与用户输入无关的更新
		updateWithInput();		//与用户输入有关的更新
	}
	return 0;
}